package com.directorio.controller.servlets;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.directorio.modelo.bean.Email;
import com.directorio.modelo.bean.Empresa;
import com.directorio.modelo.bean.Empresa_Requerimiento;
import com.directorio.modelo.bean.Persona;
import com.directorio.modelo.service.EmpresaService;
import com.directorio.modelo.service.LocalidadesService;
import com.directorio.modelo.service.MailService;
import com.directorio.modelo.utiles.pojo.JsonData;
import com.directorio.controller.FrontEnd;
import com.google.gson.Gson;
import javax.servlet.http.HttpSession;


public class EmpresaController extends HttpServlet{

    private static final long serialVersionUID = 1L;
    private HttpServletRequest request;
    public EmpresaService empresaService;
    public MailService mailService;
    private LocalidadesService localidades = null;
    private Gson json;
    private ServletConfig conf;

    public EmpresaController(){
        requestContext();
    }
    
    public void init(ServletConfig config) throws ServletException {
    	this.conf = config;
		super.init(config);
		requestContext();
	}

    private void requestContext(){
        System.out.println("EmpresaService Inicializando Contexto de Referncia...!");
        empresaService = (EmpresaService)FrontEnd.CONTEXT.getBean("empresaService");
        mailService = (MailService)FrontEnd.CONTEXT.getBean("mailService");
        localidades = (LocalidadesService) FrontEnd.CONTEXT.getBean("localidadesService");
        json = new Gson();
        System.out.println("Contexto de Referncia Service Creado Satisfactoriamente...!");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        procestServlet(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        procestServlet(request, response);
    }

    private void procestServlet(HttpServletRequest request, HttpServletResponse response) throws IOException{
        response.setCharacterEncoding("UTF-8");
        this.request = request;
        String ret_Json = "";
        try{
            int op = Integer.parseInt(request.getParameter("opt"));
            switch(op){
	            case 1: ret_Json = insertEmpresa();break;
	            case 2: ret_Json = getEmpresa();break;
	            case 3: ret_Json = getGiroEmpresa();break;
	            case 4: ret_Json = getCargoEncargado();break;
	            case 5: ret_Json = insertRequerEncargado();break;
	            case 6: ret_Json = getRequerimientCreados();break;
	            case 7: ret_Json = sendMail();break;
	            case 8: ret_Json = publicRequerimient();break;
	            case 10: ret_Json = updateDatosEmpresa();break;
	            case 11: ret_Json = updateDatosResponsEmpresa();break;
	            case 12: ret_Json = getRequerimient();break;
	            case 13: ret_Json = getPerfiles();break;
	            case 14: ret_Json = deleteRequerimiento();break;
	            case 15: ret_Json =  getRequerimientPorAprob();break;
	            case 16: ret_Json = getRequerimientEjecuc();break;
	            case 17: ret_Json = getRequerimientFinal();break;
	            case 18: ret_Json = getRequerimientDetalle();break;
            }
        }
        catch(NumberFormatException numberformatexception) { }
        response.getWriter().print(ret_Json);
    }

	private String getRequerimientDetalle(){
		String ret = "";
        List listReq = null;
        HttpSession ses = this.request.getSession();
        Map map = new HashMap();
        try{
        	map.put("_id_rq",this.request.getParameter("_id_rq"));
        	map.put("_ruc",this.request.getParameter("_ruc"));
            listReq = empresaService.obtenerRequerimientWithData(map);
            ret = json.toJson(listReq);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            ret = null;
        }
        return ret;
	}

	private String getRequerimientFinal() {
		String ret = "";
        List listReq = null;
        HttpSession ses = this.request.getSession();
        String ruc = "";
        try{
            ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
            listReq = empresaService.obtenerRequerimientosFinalizados(ruc);
            ret = json.toJson(listReq);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            ret = null;
        }
        return ret;
	}

	private String getRequerimientEjecuc() {
		String ret = "";
        List listReq = null;
        HttpSession ses = this.request.getSession();
        String ruc = "";
        try{
            ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
            listReq = empresaService.obtenerRequerimientosEnEjecucion(ruc);
            ret = json.toJson(listReq);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            ret = null;
        }
        return ret;
	}

	private String getRequerimientPorAprob() {
		String ret = "";
        List listReq = null;
        HttpSession ses = this.request.getSession();
        String ruc = "";
        try{
        	if(((Empresa)ses.getAttribute("empresa")).getRuc()!=null){
        		ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
        	}
            
            listReq = empresaService.obtenerRequerimientosPorAprobar(ruc);
            ret = json.toJson(listReq);
            
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            ret = null;
        }
        return ret;
	}

	private String deleteRequerimiento() {
		String ret = "";
        int op = 0;
        HttpSession ses = this.request.getSession();
        String ruc = "";
        try{
            ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
            Empresa_Requerimiento emp_re = new Empresa_Requerimiento();
            emp_re.setRuc(ruc);
            emp_re.setCod(this.request.getParameter("req"));
            op = empresaService.eliminarRequerEmpresa(emp_re);
        } catch(Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return json.toJson(new JsonData(op != 0 ? "ok" : null));
	}

	private String getPerfiles() {
		String ret = "";
        List listPerf = null;
        Map map = new HashMap();
        try{
        	map.put("_dsc", this.request.getParameter("dsc"));
        	map.put("_tp_al", this.request.getParameter("tp_a"));
        	map.put("_tp_es", this.request.getParameter("tp_s"));        	
        	listPerf = empresaService.obtenerPerfilAlumn(map);
            ret = json.toJson(listPerf);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            ret = null;
        }
        return ret;
	}

	private String getRequerimientCreados() {
		String ret = "";
        List listReq = null;
        HttpSession ses = this.request.getSession();
        String ruc = "";
        try{
            ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
            listReq = empresaService.obtenerRequerimientosCreados(ruc);
            ret = json.toJson(listReq);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            ret = null;
        }
        return ret;
	}

	private String updateDatosResponsEmpresa() {
    	int op = 0;
		String ruc = "";
		String val = "";
		int opt = 0;
		HttpSession ses = this.request.getSession();
		Empresa empresa = null;
		Persona pers = null;
		try{
			empresa = ((Empresa)ses.getAttribute("empresa"));
			empresa.setDni(this.request.getParameter("dni"));
			empresa.setEmail_encargado(this.request.getParameter("email"));
			empresa.setPersona(new Persona(this.request.getParameter("ape_pat"),
					this.request.getParameter("ape_mat"),this.request.getParameter("nomb")));
			op = empresaService.modificarDatosResponsabEmpresa(empresa);
		}catch(Exception ex){
			ex.printStackTrace();
		}
		if(op==1){
			ses.setAttribute("empresa", empresa);
		}
		return json.toJson(new JsonData(op != 0 ? "ok" : null));
	}
	private String updateDatosEmpresa() {
		int op = 0;
		String ruc = "";
		String val = "";
		int opt = 0;
		HttpSession ses = this.request.getSession();
		Empresa empresa = (Empresa)ses.getAttribute("empresa");
		try{
			ruc = empresa.getRuc();
			val = this.request.getParameter("val");
			opt = Integer.parseInt(this.request.getParameter("opc"));
			op = empresaService.modificarDatosEmpresa(ruc, val, opt);
			if(op==1){
				switch(opt){
					case 1: empresa.setGiro_empresa(empresaService.obtenerEmpresa(ruc).getGiro_empresa());break;
					case 2: empresa.setPagina_web(val);break;
					case 3: empresa.setDireccion(val);break;
					case 4: empresa.setTelefono(val);break;
					case 5: empresa.setCargo_encargado(empresaService.obtenerEmpresa(ruc).getCargo_encargado());break;
					case 6: empresa.setEmail_encargado(val);break;
				}
				this.request.setAttribute("empresa",empresa);
			}
		}catch(Exception ex){
			ex.printStackTrace();
		}
		return json.toJson(new JsonData(op != 0 ? "ok" : null));
	}
	private String publicRequerimient() {
        int op = 0;
        HttpSession ses = this.request.getSession();
        try{
        	String ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
            String detal = request.getParameter("det");
            op = empresaService.publicarRequerimientoEmpresa(ruc, detal);
        } catch(Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return json.toJson(new JsonData(op != 0 ? "ok" : null));
	}
	private String sendMail() {
		String ret = null;
		Map map = new HashMap();
		Email mail = new Email();
		String ruc = "";
		HttpSession ses = this.request.getSession();
		try{
			ruc = this.request.getParameter("ruc");
			map.put("_id_req",Integer.parseInt(this.request.getParameter("id_req")));
			int accion = Integer.parseInt(this.request.getParameter("aci"));
			
			mail.setRemitente("UNP, Facultad Ing. Industrial, ");
			if(accion==1){
				mail.setMensateSubject("OFERTAS POR ATENDER");
				mail.setEmail(localidades.obtenerMailAdmin());
				mail.setMensajeText("TIENES NUEVAS OFERTAS POR ATENDER\n"+
						"RUC SOLICITANTE: "+ruc+"... \nREVISA TU BANDEJA");
			}else if(accion==2){
				mail.setMensateSubject("HAY UNA OFERTA QUE PODRIAS PARTICIPAR");
				List<String> mailsArray = null;
				map.put("_ruc",ruc);
				mailsArray = empresaService.obtenerMailsDesdeRequerimiento(map);
				mail.setEmail(mailsArray);
				mail.setMensajeText("TIENES OFERTAS POR REVISAR");
			}else{
				mail.setMensateSubject("HAY UNA OFERTA QUE PODRIAS PARTICIPAR");
				List<String> mailsArray = new ArrayList<String>();
//				File fil = new File("WEB-CONTENT/img/Pantallazo-4.png");
				File imaFil = new File(conf.getServletContext().getRealPath("/WEB-CONTENT/img/max.jpg"));
				mail.setImagen(imaFil);
				mailsArray.add("max_piscis4@hotmail.com");
				mail.setEmail(mailsArray);
				mail.setMensajeText("<h1>TIENES OFERTAS POR REVISAR</h1>");
			}
			try{
				ret =  mailService.enviarMensaje(mail);
			}catch(Exception ex){
				ex.printStackTrace();
			}	
		}catch(NumberFormatException ex){
			return null;
		}catch(Exception ex) {
            return null;
        }		
		return json.toJson(new JsonData(ret));
	}
	private String getRequerimient()
    {
        String ret = "";
        List listReq = null;
        HttpSession ses = this.request.getSession();
        String ruc = "";
        try{
            ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
            listReq = empresaService.obtenerTodosRequerimientos(ruc);
            ret = json.toJson(listReq);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            ret = null;
        }
        return ret;
    }
	private String insertRequerEncargado(){
        String ret = "";
        int op = 0;
        HttpSession ses = this.request.getSession();
        String ruc = "";
        try{
            ruc = ((Empresa)ses.getAttribute("empresa")).getRuc();
            Empresa_Requerimiento emp_re = new Empresa_Requerimiento();
            emp_re.setRuc(ruc);
            emp_re.setTip_alum(this.request.getParameter("tip"));
            emp_re.setTip_oft(this.request.getParameter("tp_o"));
            emp_re.setEsc("1");
//            emp_re.setEsc(this.request.getParameter("esc"));
            emp_re.setCrg(this.request.getParameter("crg"));
            emp_re.setDes(this.request.getParameter("descrip"));
            emp_re.setFec_ven(this.request.getParameter("fec_venc"));
            emp_re.setCod_habilidades(this.request.getParameter("cod_habil"));
            op = empresaService.insertaRequerEmpresa(emp_re);
        } catch(Exception ex) {
            json = null;
            ex.printStackTrace();
        }
        return json.toJson(new JsonData(op != 0 ? "ok" : null));
    }
	private String getCargoEncargado(){
        String ret = "";
        try{
            java.util.List list = empresaService.obtenerCargo();
            ret = json.toJson(list);
        }
        catch(Exception ex){
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }
	private String getGiroEmpresa(){
        String ret = "";
        try
        {
            java.util.List list = empresaService.obtenerGiro();
            ret = json.toJson(list);
        }
        catch(Exception ex)
        {
            json = null;
            ex.printStackTrace();
        }
        return ret;
    }
	private String getEmpresa()
    {
		HttpSession sesion = this.request.getSession();
		String ret = "";
        Empresa emp = null;
        try
        {
            emp = (Empresa)sesion.getAttribute("empresa");
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return json.toJson(new JsonData(emp));
    }
	private String insertEmpresa()
    {
        String rt = "";
        int op = 0;
        try
        {
            Empresa empresa = new Empresa();
            empresa.setRuc(this.request.getParameter("ruc"));
            empresa.setRazon_social(this.request.getParameter("razon"));
            empresa.setDni(this.request.getParameter("dni"));
            empresa.setDistrito(this.request.getParameter("dist"));
            empresa.setGiro_empresa(this.request.getParameter("gir"));
            empresa.setDescripcion(this.request.getParameter("descrip"));
            empresa.setDireccion(this.request.getParameter("dir"));
            empresa.setRef_direccion(this.request.getParameter("ref"));
            empresa.setTelefono(this.request.getParameter("tel"));
            empresa.setPagina_web(this.request.getParameter("pag"));
            empresa.setCargo_encargado(this.request.getParameter("carg"));
            empresa.setEmail_encargado(this.request.getParameter("mail"));
            Persona per = new Persona();
            per.setDni(this.request.getParameter("dni"));
            per.setApe_paterno_pers(this.request.getParameter("a_pat"));
            per.setApe_materno_pers(this.request.getParameter("a_mat"));
            per.setNomb_pers(this.request.getParameter("nomb"));
            empresa.setPersona(per);
            op = empresaService.insertaEmpresa(empresa);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return json.toJson(new JsonData(op != 0 ? "ok" : null));
    }
}
